package gulimall.ware.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import gulimall.utils.PageUtils;
import gulimall.utils.Query;
import gulimall.ware.dao.WareSkuDao;
import gulimall.ware.entity.WareSkuEntity;
import gulimall.ware.service.WareSkuService;
import gulimall.ware.vo.HasStockVo;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


@Service("wareSkuService")
public class WareSkuServiceImpl extends ServiceImpl<WareSkuDao, WareSkuEntity> implements WareSkuService {

    @Resource
    private WareSkuDao wareSkuDao;

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        String warId = (String) params.get("wareId");
        String skuId = (String) params.get("skuId");

        QueryWrapper<WareSkuEntity> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(warId)) {
            queryWrapper.lambda().eq(WareSkuEntity::getWareId, warId);
        }
        if (StringUtils.isNotBlank(skuId)) {
            queryWrapper.lambda().eq(WareSkuEntity::getSkuId, skuId);
        }

        IPage<WareSkuEntity> page = this.page(
                new Query<WareSkuEntity>().getPage(params),
                queryWrapper
        );

        return new PageUtils(page);
    }

    @Override
    @Transactional
    public void addStock(WareSkuEntity wareSkuEntity) {
        //1.判断表中是否有库存记录，没有就新增，有就修改
        WareSkuEntity entity = wareSkuDao.selectOne(new QueryWrapper<WareSkuEntity>()
                .lambda()
                .eq(WareSkuEntity::getSkuId, wareSkuEntity.getSkuId())
                .eq(WareSkuEntity::getWareId, wareSkuEntity.getWareId())
        );
        if (entity != null) {
            wareSkuDao.addStock(wareSkuEntity);
        } else {
            wareSkuEntity.setStockLocked(0);//锁定库存(用户已下单的商品)默认为0
            wareSkuDao.insert(wareSkuEntity);
        }

    }

    /**
     * 根据skuId判断对应的商品是否含有库存
     *
     * @param skuIds
     * @return
     */
    @Override
    public List<HasStockVo> hasStockBySkuIds(List<Long> skuIds) {
        //查询skuId对应的所有wareSku

        List<HasStockVo> hasStockVos = skuIds.stream().map(skuId -> {
            WareSkuEntity wareSkuEntity = wareSkuDao.selectOne(new LambdaQueryWrapper<WareSkuEntity>()
                    .eq(WareSkuEntity::getSkuId, skuId));

            HasStockVo hasStockVo = new HasStockVo();
            hasStockVo.setSkuId(skuId);
            if (wareSkuEntity != null) {

                //获取skuId对应的总库存
                Long count = wareSkuDao.getSkuStock(wareSkuEntity.getSkuId());

                hasStockVo.setHasStock(count != null && count > 0);
            } else {
                hasStockVo.setHasStock(false);
            }


            return hasStockVo;
        }).collect(Collectors.toList());

        return hasStockVos;
    }

}